package cn.topevery.garden.dal.dao;

import cn.topevery.garden.entity.po.Person;
import cn.topevery.garden.entity.po.PersonSearch;
import cn.topevery.garden.entity.query.PersonQuery;
import cn.topevery.garden.entity.vo.PersonVO;
import cn.topevery.garden.entity.vo.oneMap.CountVO;
import cn.topevery.garden.framework.base.BaseDao;
import hw.topevery.basis.entity.po.SysUser;
import hw.topevery.framework.db.entity.DataPager;

import java.util.List;
import java.util.Map;

/**
 * 描述 The interface Person dao.
 *
 * @author code -generate
 * @created 2021 -08-25 09:26:38
 * @date 2021 -08-06
 */
public interface PersonDao extends BaseDao<Person> {


    /**
     * 获取列表
     *
     * @param query the query
     * @return the data pager
     * @author wenzhao.lin
     * @created 2021 -08-25 09:26:38 List page data pager.
     */
    DataPager<PersonSearch> listPage(PersonQuery query);

    /**
     * 描述 获取统计数量.
     *
     * @param name     the name
     * @param extentId the extent id
     * @param typeId   the type id
     * @return the list
     * @author wenzhao.lin
     * @created 2021 -08-25 09:26:38 Get count list.
     */
    Map getCount(String name, Integer extentId, Integer typeId);

    /**
     * 描述 通过人员类型获取列表
     *
     * @param name       the name
     * @param extentId   the extent id
     * @param personType the person type
     * @return the person list by type
     * @author wenzhao.lin
     * @created 2021 -08-25 09:26:38
     */
    List<Person> getPersonListByType(String name, Integer extentId, Integer personType);


    /**
     * 描述 获取类型列表
     *
     * @param name     the name
     * @param extentId the extent id
     * @return the person type list
     * @author wenzhao.lin
     * @created 2021 -08-27 09:16:21
     */
    List<Person> getPersonTypeList(String name, Integer extentId);

    /**
     * 描述 Gets sys user list.
     *
     * @param mobiles the mobiles
     * @return the sys user list
     * @author wenzhao.lin
     * @created 2021 -09-09 13:58:05
     */
    List<SysUser> getSysUserList(List<String> mobiles);

    /**
     * 描述 Gets peson list.
     *
     * @param mobiles the mobiles
     * @return the peson list
     * @author wenzhao.lin
     * @created 2021 -09-09 13:58:05
     */
    List<Person> getPesonList(List<String> mobiles);

    /**
     * 描述 一张图管理-人车概况- 获取人员统计
     *
     * @return the person count
     * @author wenzhao.lin
     * @created 2021 -09-09 13:58:05
     */
    List<CountVO> getPersonCount();

    /**
     * 描述 一张图管理-人车概况- 获取人员 在线/离线 统计
     *
     * @return the person online count
     * @author wenzhao.lin
     * @created 2021 -09-13 09:19:32
     */
    List<CountVO> getPersonOnlineAndOutCount();

    /**
     * 描述 一张图管理-人车概况- 获取所有人员类型统计
     *
     * @return the person type count
     * @author wenzhao.lin
     * @created 2021 -09-09 13:58:05
     */
    List<CountVO> getPersonTypeCount();

    /**
     * 描述 一张图管理-人车概况- 获取在岗人员类型统计
     *
     * @return the person online count
     * @author wenzhao.lin
     * @created 2021 -09-09 13:58:05
     */
    List<CountVO> getPersonOnlineCount();

    /**
     * 描述 一张图管理-人车概况- 获取人员列表
     *
     * @param query the query
     * @return the data pager
     * @author wenzhao.lin
     * @created 2021 -09-09 13:47:26 List page data pager.
     */
    DataPager<PersonVO> getPersonListData(PersonQuery query);

    PersonVO getByUserId(String userId);

    List<Map<String, Object>> getOpenIdByExtentId(Integer extentId);

    List<SysUser> getUserNotIn();
}
